######## snakemake preamble start (automatically inserted, do not edit) ########
import sys; sys.path.extend(['/biggin/b147/univ4859/miniconda3/envs/snakemake/lib/python3.9/site-packages', '/biggin/b147/univ4859/research/03_macroconf/notebooks']); import pickle; snakemake = pickle.loads(b'\x80\x04\x95\xe2"\x00\x00\x00\x00\x00\x00\x8c\x10snakemake.script\x94\x8c\tSnakemake\x94\x93\x94)\x81\x94}\x94(\x8c\x05input\x94\x8c\x0csnakemake.io\x94\x8c\nInputFiles\x94\x93\x94)\x81\x94(\x8cRdata/interim/refactor-test/22/H2O/11_GaMD_full/2000/0/ed6dd3148ef9b069_weights.dat\x94\x8cMdata/interim/refactor-test/22/H2O/11_GaMD_full/2000/0/ed6dd3148ef9b069_md.out\x94\x8cRdata/interim/refactor-test/22/H2O/11_GaMD_full/2000/0/ed6dd3148ef9b069_traj.netcdf\x94\x8cPdata/interim/refactor-test/22/H2O/11_GaMD_full/2000/0/ed6dd3148ef9b069_traj.ncdf\x94\x8c?data/interim/refactor-test/22/H2O/1_make_topology/mc_sol.prmtop\x94\x8c\'data/interim/refactor-test/22/data.json\x94\x8c&data/interim/refactor-test/22/NOE.json\x94e}\x94(\x8c\x06_names\x94}\x94(\x8c\x07weights\x94K\x00N\x86\x94\x8c\x03out\x94K\x01N\x86\x94\x8c\x04traj\x94K\x02N\x86\x94\x8c\ttraj_ncdf\x94K\x03N\x86\x94\x8c\x03top\x94K\x04N\x86\x94\x8c\x04parm\x94K\x05N\x86\x94\x8c\x03noe\x94K\x06N\x86\x94u\x8c\x12_allowed_overrides\x94]\x94(\x8c\x05index\x94\x8c\x04sort\x94eh$\x8c\tfunctools\x94\x8c\x07partial\x94\x93\x94h\x06\x8c\x19Namedlist._used_attribute\x94\x93\x94\x85\x94R\x94(h*)}\x94\x8c\x05_name\x94h$sNt\x94bh%h(h*\x85\x94R\x94(h*)}\x94h.h%sNt\x94bh\x14h\nh\x16h\x0bh\x18h\x0ch\x1ah\rh\x1ch\x0eh\x1eh\x0fh h\x10ub\x8c\x06output\x94h\x06\x8c\x0bOutputFiles\x94\x93\x94)\x81\x94(\x8cVdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_pca_dihed.png\x94\x8cPdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_noe.png\x94\x8cTdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_noe_pmf.png\x94\x8cYdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_cluster_plot.png\x94\x8cXdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_cluster_pca.png\x94\x8c]data/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_cluster_min_samp.png\x94\x8cYdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_cluster_time.png\x94\x8c\\data/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_cluster_structs.png\x94\x8cZdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_noe_stat_plot.png\x94\x8c^data/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_clusters/clusters.pdb\x94\x8cXdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_noe_result.json\x94\x8cWdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_noe_stats.json\x94\x8cVdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_dihedrals.dat\x94\x8cQdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_dPCA.dat\x94\x8c\\data/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_dPCA_weights_MC.dat\x94\x8cUdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_NOE_dist.dat\x94\x8cUdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_multiple.dat\x94e}\x94(h\x12}\x94(\x8c\x08pca_dihe\x94K\x00N\x86\x94\x8c\x08noe_plot\x94K\x01N\x86\x94\x8c\x07noe_pmf\x94K\x02N\x86\x94\x8c\x0ccluster_plot\x94K\x03N\x86\x94\x8c\x0bcluster_pca\x94K\x04N\x86\x94\x8c\x10cluster_min_samp\x94K\x05N\x86\x94\x8c\x0ccluster_time\x94K\x06N\x86\x94\x8c\x0fcluster_structs\x94K\x07N\x86\x94\x8c\rnoe_stat_plot\x94K\x08N\x86\x94\x8c\x0bcluster_pdb\x94K\tN\x86\x94\x8c\nnoe_result\x94K\nN\x86\x94\x8c\tnoe_stats\x94K\x0bN\x86\x94\x8c\tdihedrals\x94K\x0cN\x86\x94\x8c\x04dPCA\x94K\rN\x86\x94\x8c\x0fdPCA_weights_MC\x94K\x0eN\x86\x94\x8c\x08noe_dist\x94K\x0fN\x86\x94\x8c\x08multiple\x94K\x10N\x86\x94uh"]\x94(h$h%eh$h(h*\x85\x94R\x94(h*)}\x94h.h$sNt\x94bh%h(h*\x85\x94R\x94(h*)}\x94h.h%sNt\x94bhKh8hMh9hOh:hQh;hSh<hUh=hWh>hYh?h[h@h]hAh_hBhahChchDhehEhghFhihGhkhHub\x8c\x06params\x94h\x06\x8c\x06Params\x94\x93\x94)\x81\x94(\x8cRdata/processed/refactor-test/results/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_clusters/\x94\x8c\x04GaMD\x94e}\x94(h\x12}\x94(\x8c\x0bcluster_dir\x94K\x00N\x86\x94\x8c\x06method\x94K\x01N\x86\x94uh"]\x94(h$h%eh$h(h*\x85\x94R\x94(h*)}\x94h.h$sNt\x94bh%h(h*\x85\x94R\x94(h*)}\x94h.h%sNt\x94bh~hzh\x80h{ub\x8c\twildcards\x94h\x06\x8c\tWildcards\x94\x93\x94)\x81\x94(\x8c\rrefactor-test\x94\x8c\x0222\x94\x8c\x03H2O\x94\x8c\x042000\x94\x8c\x010\x94\x8c\x10ed6dd3148ef9b069\x94e}\x94(h\x12}\x94(\x8c\x08exp_name\x94K\x00N\x86\x94\x8c\x0ccompound_dir\x94K\x01N\x86\x94\x8c\x07solvent\x94K\x02N\x86\x94\x8c\x04time\x94K\x03N\x86\x94\x8c\x06repeat\x94K\x04N\x86\x94\x8c\x05index\x94K\x05N\x86\x94uh"]\x94(h$h%eh$h\x94h%h(h*\x85\x94R\x94(h*)}\x94h.h%sNt\x94b\x8c\x08exp_name\x94h\x8fh\x99h\x90\x8c\x07solvent\x94h\x91\x8c\x04time\x94h\x92\x8c\x06repeat\x94h\x93ub\x8c\x07threads\x94K\x06\x8c\tresources\x94h\x06\x8c\tResources\x94\x93\x94)\x81\x94(K\x06K\x01\x8c\x04/tmp\x94e}\x94(h\x12}\x94(\x8c\x06_cores\x94K\x00N\x86\x94\x8c\x06_nodes\x94K\x01N\x86\x94\x8c\x06tmpdir\x94K\x02N\x86\x94uh"]\x94(h$h%eh$h(h*\x85\x94R\x94(h*)}\x94h.h$sNt\x94bh%h(h*\x85\x94R\x94(h*)}\x94h.h%sNt\x94bh\xb4K\x06h\xb6K\x01h\xb8h\xb1ub\x8c\x03log\x94h\x06\x8c\x03Log\x94\x93\x94)\x81\x94\x8c_data/processed/refactor-test/notebooks/22/H2O/GaMD/2000/0/ed6dd3148ef9b069_GaMD_processed.ipynb\x94a}\x94(h\x12}\x94\x8c\x08notebook\x94K\x00N\x86\x94sh"]\x94(h$h%eh$h(h*\x85\x94R\x94(h*)}\x94h.h$sNt\x94bh%h(h*\x85\x94R\x94(h*)}\x94h.h%sNt\x94bh\xcah\xc7ub\x8c\x06config\x94}\x94(\x8c\tcompounds\x94]\x94(K8K\x18K\x16K7e\x8c\x10cheminfo_confgen\x94]\x94\x8c\x05omega\x94a\x8c\x11confgen_paramters\x94}\x94\x8c\x05omega\x94]\x94(\x8c\x05basic\x94\x8c\nchloroform\x94es\x8c\thash_list\x94]\x94(]\x94(\x8c\x1094214a84a78d8392\x94\x8c\x10ea902b72328019c4\x94\x8c\x1005834cbd8c236ca0\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10f85eb31757da7e52\x94\x8c\x1005834cbd8c236ca0\x94\x8c\x109eb48310b74aa061\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x1010236f52ef18b2a3\x94\x8c\x1015ff3a3813ba7460\x94\x8c\x10e36fd3c2b58d633f\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10c530212023f40ad9\x94\x8c\x1010236f52ef18b2a3\x94\x8c\x1094214a84a78d8392\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x100a303e31ccdf82a5\x94\x8c\x10c530212023f40ad9\x94\x8c\x1010236f52ef18b2a3\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x100a303e31ccdf82a5\x94\x8c\x106223de6c169344e9\x94\x8c\x10f85eb31757da7e52\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x100a303e31ccdf82a5\x94\x8c\x1015ff3a3813ba7460\x94\x8c\x10e36fd3c2b58d633f\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x106223de6c169344e9\x94\x8c\x10f85eb31757da7e52\x94\x8c\x10b3332ce08307c920\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10b3332ce08307c920\x94\x8c\x101f323341d36478d5\x94\x8c\x10f8f83124ccdc7c13\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10e36fd3c2b58d633f\x94\x8c\x10f8f83124ccdc7c13\x94\x8c\x10282f14929802f7ac\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x100a303e31ccdf82a5\x94\x8c\x10e36fd3c2b58d633f\x94\x8c\x10f8f83124ccdc7c13\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x100a303e31ccdf82a5\x94\x8c\x109eb48310b74aa061\x94\x8c\x10282f14929802f7ac\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x105ad86a1e5e790925\x94\x8c\x107e4cdc50cc70fc15\x94\x8c\x104574de591364a01f\x94\x8c\x0255\x94h\x93h\x93e]\x94(\x8c\x105ad86a1e5e790925\x94\x8c\x10395e86cd79c14300\x94\x8c\x10938ec71731842389\x94\x8c\x0255\x94h\x93h\x93e]\x94(\x8c\x108374da5ea9cc35c0\x94\x8c\x100a303e31ccdf82a5\x94\x8c\x1010236f52ef18b2a3\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x108374da5ea9cc35c0\x94\x8c\x100a303e31ccdf82a5\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x10c530212023f40ad9\x94\x8c\x1010236f52ef18b2a3\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x103d00b0964201e088\x94\x8c\x1009a11fd633f3a72b\x94\x8c\x106a9359deeeab1adc\x94\x8c\x0224\x94h\x93h\x93e]\x94(\x8c\x103d00b0964201e088\x94\x8c\x105d7022b409750c68\x94\x8c\x10e92cb0e6ed121828\x94\x8c\x0224\x94h\x93h\x93e]\x94(\x8c\x10242ee4d4af3634ed\x94\x8c\x10660d1badff741862\x94\x8c\x105ad86a1e5e790925\x94\x8c\x0255\x94h\x93h\x93e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x108374da5ea9cc35c0\x94\x8c\x103c523c7ca380f925\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x108374da5ea9cc35c0\x94\x8c\x100a303e31ccdf82a5\x94\x8c\x103c523c7ca380f925\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x109a100624325ec4cd\x94\x8c\x109eb48310b74aa061\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10242ee4d4af3634ed\x94\x8c\x106163f1ecc9f26d15\x94\x8c\x10938ec71731842389\x94\x8c\x0255\x94\x8c\x05omega\x94\x8c\x05basic\x94e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x10db88602b153df078\x94\x8c\x10c74338f1c2e97967\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x1004326f349933814b\x94\x8c\x10db88602b153df078\x94\x8c\x10c74338f1c2e97967\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x10bbe75067f45d5efd\x94\x8c\x109a100624325ec4cd\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x102088374558ed79c5\x94\x8c\x10b269c69e29e2b3a6\x94\x8c\x10d7cd9d09c7724d89\x94\x8c\x0256\x94\x8c\x05omega\x94\x8c\x05basic\x94e]\x94(\x8c\x108374da5ea9cc35c0\x94\x8c\x10b42d1cec1349e562\x94\x8c\x103d110be4b2d63f96\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x101a8e577036845661\x94\x8c\x10bbe75067f45d5efd\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x103d110be4b2d63f96\x94\x8c\x10b42d1cec1349e562\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x108374da5ea9cc35c0\x94\x8c\x103c523c7ca380f925\x94\x8c\x0222\x94\x8c\x05omega\x94\x8c\x05basic\x94e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x108374da5ea9cc35c0\x94\x8c\x105eedf239922efaee\x94\x8c\x0222\x94\x8c\x05omega\x94\x8c\x05basic\x94e]\x94(\x8c\x103d00b0964201e088\x94\x8c\x1009a11fd633f3a72b\x94\x8c\x105d7022b409750c68\x94\x8c\x0224\x94\x8c\x05omega\x94\x8c\x05basic\x94e]\x94(\x8c\x10459a7f09ce68039a\x94\x8c\x103fe88b3d3ed6d9d3\x94\x8c\x10d236cb661a6d3813\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x10459a7f09ce68039a\x94\x8c\x101a8e577036845661\x94\x8c\x0222\x94h\x93h\x93e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x108374da5ea9cc35c0\x94\x8c\x103c523c7ca380f925\x94\x8c\x0222\x94\x8c\x05omega\x94\x8c\nchloroform\x94e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x10459a7f09ce68039a\x94\x8c\x10d236cb661a6d3813\x94\x8c\x0222\x94\x8c\x05omega\x94\x8c\nchloroform\x94e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x108374da5ea9cc35c0\x94\x8c\x10d236cb661a6d3813\x94\x8c\x0222\x94\x8c\x05omega\x94\x8c\x05basic\x94e]\x94(\x8c\x10ed6dd3148ef9b069\x94\x8c\x108374da5ea9cc35c0\x94\x8c\x103c523c7ca380f925\x94\x8c\x0222\x94\x8c\x05rdkit\x94\x8c\x05basic\x94e]\x94(\x8c\x103d00b0964201e088\x94\x8c\x1009a11fd633f3a72b\x94\x8c\x105d7022b409750c68\x94\x8c\x0224\x94\x8c\x05rdkit\x94\x8c\x05basic\x94e]\x94(\x8c\x10242ee4d4af3634ed\x94\x8c\x106163f1ecc9f26d15\x94\x8c\x10938ec71731842389\x94\x8c\x0255\x94\x8c\x05rdkit\x94\x8c\x05basic\x94e]\x94(\x8c\x102088374558ed79c5\x94\x8c\x10b269c69e29e2b3a6\x94\x8c\x10d7cd9d09c7724d89\x94\x8c\x0256\x94\x8c\x05rdkit\x94\x8c\x05basic\x94ee\x8c\x06stride\x94K\n\x8c\x0ccluster_conf\x94}\x94(\x8c\x10242ee4d4af3634ed\x94K\x0f\x8c\x108374da5ea9cc35c0\x94K\n\x8c\x103c523c7ca380f925\x94K\n\x8c\x10ca1a37290d9e454e\x94K\x08\x8c\x109a100624325ec4cd\x94K\x06\x8c\x103d00b0964201e088\x94K\n\x8c\x10ed6dd3148ef9b069\x94K\x08u\x8c\x04ns_h\x94G@)\x00\x00\x00\x00\x00\x00\x8c\x08exp_name\x94\x8c\rrefactor-test\x94\x8c\tdata_name\x94\x8c\x1722-02-2021_MacroConf-v2\x94\x8c\x0bsample_file\x94\x8c\x0bsamples.tsv\x94\x8c\rsample_output\x94\x8c\x0fsamples_old.tsv\x94\x8c\nforcefield\x94\x8c1libs/forcefields/leaprc.protein.ff14SB_noterminal\x94\x8c\x0bDMSO_params\x94\x8c!libs/md_solvents/dmso/frcmod.dmso\x94\x8c\x08DMSO_box\x94\x8c!libs/md_solvents/dmso/dmsobox.off\x94\x8c\x11Chloroform_params\x94\x8c\x0cfrcmod.chcl3\x94\x8c\x16clustering_min_samples\x94}\x94(\x8c\x0222\x94K\n\x8c\x011\x94K"u\x8c\x0eaMD_clustering\x94}\x94(\x8c\x0256\x94K\x0c\x8c\x0255\x94K\n\x8c\x0222\x94K\x07u\x8c\x0ecMD_clustering\x94}\x94(\x8c\x0222\x94K\n\x8c\x0224\x94K\x07\x8c\x0255\x94K\x0f\x8c\x0256\x94K\x0bu\x8c\x0fGaMD_clustering\x94}\x94(\x8c\x0222\x94K\x0c\x8c\x0224\x94K\n\x8c\x0256\x94K u\x8c\nmd_methods\x94]\x94(\x8c\x03cMD\x94\x8c\x04GaMD\x94\x8c\x03aMD\x94e\x8c\x0bcMD_repeats\x94K\x01\x8c\x08cMD_time\x94Kd\x8c\x0baMD_repeats\x94K\x01\x8c\x08aMD_time\x94Kd\x8c\x0cGaMD_repeats\x94K\x01\x8c\tGaMD_time\x94Kd\x8c\x08md_times\x94N\x8c\x04em_1\x94X\xc7\x01\x00\x00Minimize water\n System minimization.\n&cntrl\n imin=1, ntmin=1, !(Invoke Minimization)\n ntx=1, irest=0, !(read init. coords, no restart)\n maxcyc=20000, ncyc=15000, !(max. cycles switch to conj. grad.)\n drms=0.1, !(convergence criterion)\n ntpr=100, ntwr=100, iwrap=0, !(outputs)\n ntf=1, !(force eval all)\n cut=8.0, !(non-bonded cutoff)\n ntr=1, !(cartesian restraints)\n restraintmask="!:WAT", restraint_wt=10.0, !(restrain all but water)\n /\n\x94\x8c\x04em_2\x94X\xb3\x01\x00\x00Relax water\n LET WATER MOVE\n&cntrl\n imin=0,\n ntx=1, irest=0,\n ntpr=500, ntwx=500, ntwv=0, ntwe=0,\n ntwr=5000, !(outputs)\n t=0.0, dt=0.002, !(timestep)\n nstlim=10000, iwrap=1, !(steps, wrap to box)\n ntt=1, !(temp. control)\n temp0=300.0, tempi=200.0, tautp=0.5,\n ntp=1, pres0=1.0 !(pressure control)\n ntc=2, ntf=2, !(SHAKE)\n ntr=1, !(cart. restraints)\n restraintmask="!:WAT" , restraint_wt=10.0, !(restrain all but water)\n /\n\x94u\x8c\x04rule\x94\x8c\x0cmd_GaMD_anal\x94\x8c\x0fbench_iteration\x94N\x8c\tscriptdir\x94\x8c5/biggin/b147/univ4859/research/03_macroconf/notebooks\x94ub.'); from snakemake.logging import logger; logger.printshellcmds = False; import os; os.chdir(r'/biggin/b147/univ4859/research/03_macroconf');
######## snakemake preamble end #########
1.4. Analysis Notebook¶
A copy of this notebook is run to analyse the molecular dynamics simulations.
This notebook refers to compound 22. The simulation type is GaMD, 2000 ns. The simulation was performed in H2O
# show a 2d image of the molecule, and a 3d structure via py3dmol!
# also put sequence here.
#compute rmsd for different atom types
rmsds = md.rmsd(t, t, 0)
bo = topo.topology.select("protein and (backbone and name O)")
ca = topo.topology.select("name CA")
rmsds_ca = md.rmsd(t,t,0,atom_indices=ca) * 10 # Convert to Angstrom!
rmsds_bo = md.rmsd(t,t,0,atom_indices=bo) * 10 # Convert to Angstrom!
# rmsds_ca = rmsds_ca[::100]
# rmsds_bo = rmsds_bo[::100]
# make this a bokeh plot (with dropdown to choose which atom type to consider for rmsd!)
plt.plot(rmsds_ca, label='CA')
plt.plot(rmsds_bo, label='BO')
plt.legend()
plt.title('RMSD of different atoms over the simulation time')
plt.xlabel('simulation time')
plt.ylabel('RMSD in A relative to the initial frame')
plt.show()
from bokeh.plotting import figure, show, output_notebook
from bokeh.models import Slider, CheckboxGroup, CustomJS, ColumnDataSource, CDSView, CheckboxButtonGroup
from bokeh.models.filters import CustomJSFilter
from bokeh.layouts import row
from bokeh.transform import factor_cmap
from bokeh.palettes import Category10_10
output_notebook()